perm filename ASSOC[EKL,SYS]7 blob
sn#828203 filedate 1986-11-12 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00003 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 functions as association lists
C00006 00003 facts about alists
C00012 ENDMK
C⊗;
;functions as association lists
(wipe-out)
(get-proofs appl prf ekl sys)
(proof assoc)
(decl (compalist) (infixname: |∞|) (type: |ground⊗ground→ground|)
(syntype: constant) (bindingpower: 930))
(defax compalist |∀alist1 alist2 xa y.nil ∞ alist2=nil∧
((xa.y).alist1) ∞ alist2=(xa.appalist(y,alist2)).(alist1 ∞ alist2)|)
(label compalistdef)
(decl invalist (type: |GROUND→GROUND|))
(defax invalist |∀alist xa y.invalist nil=nil∧
invalist((xa.y).alist)=(y.xa).invalist alist|)
(label invalistdef)
(decl idalistp (type: |GROUND→TRUTHVAL|))
(defax idalistp |∀alist xa y.idalistp(nil)∧
(idalistp((xa.y).alist)≡xa=y∧idalistp alist)|)
(label idalistpdef)
;facts about alists
(proof alistfacts)
;check the sorts
(axiom |∀alist alist1.alistp(alist ∞ alist1)|)
(label compalistsort)(label simpinfo)
(axiom |∀alist.allp(λx.atom x,range(alist))⊃alistp invalist(alist)|)
(label invalistsort)
;facts about composition of functions
;five lemmata
(axiom |∀alist alist1 x.member(x,dom(alist))⊃
appalist(x,alist ∞ alist1)=appalist(appalist(x,alist),alist1)|)
(label alist_lemma1)(label app_compalist)
(axiom |∀alist alist1.dom(alist ∞ alist1)=dom(alist)|)
(label alist_lemma2)(label dom_compalist)
(axiom |∀alist x.member(x,dom alist)⊃
(∃y.member(y,range alist)∧appalist(x,alist)=y)|)
(label alist_lemma3) (label nonempty_range)
(axiom |∀alist z.uniqueness dom(alist)∧member(z,range alist)⊃
(∃x.member(x,dom alist)∧appalist(x,alist)=z)|)
(label alist_lemma4) (label nonempty_domain)
(axiom |∀alist alist1 za z.¬member(za,range(alist))⊃
alist ∞ ((za.z).alist1)=alist ∞ alist1|)
(label compalist_lemma)
;theorem 1: composition of permutations is a permutation
;PERMUTP(ALIST)∧PERMUTP(ALIST1)∧MKLSET(DOM(ALIST))=MKLSET(DOM(ALIST1))⊃
;PERMUTP(ALIST ∞ ALIST1)
;the steps in the proof of Theorem 1 are the following
;lemma range compose
(axiom
|∀alist alist1.permutp(alist)∧permutp(alist1)∧
mklset(dom(alist))=mklset(dom(alist1))⊃
mklset(range(alist ∞ alist1))⊂mklset(range(alist1))|)
(label range_compose)
(axiom
|∀alist alist1.permutp(alist)∧permutp(alist1)∧
mklset(dom(alist))=mklset(dom(alist1))⊃
mklset(range(alist1))⊂mklset(range(alist ∞ alist1))|)
(label range_compose)
;composition is well defined for equivalence classes
(axiom |∀alist alist1 alist2.samemap(alist1,alist2)⊃
alist ∞ alist1=alist ∞ alist2|)
(label samamap_right)
(axiom |∀alist1 alist2.samemap(alist1,alist2)⊃
samemap(alist1 ∞ alist,alist2 ∞ alist)|)
(label samamap_left)
;facts about the identity function
(axiom |∀alist y.idalistp(alist)∧member(y,dom alist)⊃appalist(y,alist)=y|)
(label idalistp_main)
;theorem 2 (i)
;∀ALIST.FUNCTP(ALIST)∧IDALISTP(ALIST)⊃PERMUTP(ALIST)
;theorem 2 (ii)
;IDALISTP(ALIST1)⊃
;(∀ALIST.MKLSET(RANGE(ALIST))⊂MKLSET(DOM(ALIST1))⊃ALIST ∞ ALIST1=ALIST)
;theorem 2 (iii)
;IDALISTP(ALISTID)∧MKLSET(DOM(ALISTID))=MKLSET(DOM(ALIST))⊃
;SAMEMAP(ALISTID ∞ ALIST,ALIST)
;facts about inversion of functions
(axiom |∀alist.allp(λx.atom x,range(alist))⊃dom(invalist(alist))=range(alist)|)
(label dom_invalist)
(axiom |∀alist.allp(λx.atom x,range(alist))⊃range(invalist(alist))=dom(alist)|)
(label range_invalist)
(axiom |∀alist.mklset(dom(alist))=mklset(range(alist))⊃
allp(λx.atom x,range(alist))|)
(label atomrange)
;we borrow this from the proof alpig:
(axiom |∀alist.permutp(alist)⊃injectp(alist)|)
(label permutp_injectp)
;theorem 3 (i)
;∀ALIST.ALLP(λX.ATOM X,RANGE(ALIST))∧INJECTP(ALIST)⊃
; IDALISTP(ALIST ∞ INVALIST(ALIST))
;theorem 3 (ii)
;∀ALIST.ALLP(λX.ATOM X,RANGE(ALIST))∧INJECTP(ALIST)⊃
; IDALISTP(INVALIST(ALIST) ∞ ALIST)
;theorem 3 (iii)
;PERMUTP(ALIST)⊃PERMUTP(INVALIST(ALIST))
(save-proofs assoc)